Odpocitavani datumu

Otázka od: David Kraina

17. 10. 2002 20:34

Dobry den,
protoze se mi nechce resit tento programatorsky orisek, jelikoz to uz urcite
nekdo vyresil, obracim se na konferenci s timto problemem. Mam dane datum,
ktere je starsi, nez datum aktualni a potreboval bych spocitat, kolik do
neho zbyva DNI:HODIN:MINUT:SEKUND. Ono by to nebyl takovy problem, kdyby
neexistovaly prestupne roky a ruzne dlouhe mesice. Setkal jste se uz s tim
nekdo ?

Dik DKx.

*DKx# - prosim nemazat, index do filtru upozorneni

Odpovedá: Jan Sebelík

18. 10. 2002 0:24

> Odesílatel: David Kraina <DKx@Seznam.cz>
> Mam dane datum,
> ktere je starsi, nez datum aktualni a potreboval bych spocitat, kolik do
> neho zbyva DNI:HODIN:MINUT:SEKUND.

TDateTime lze normalne scitat, odecitat atd.
TDateTime = Double
Pred desetinnou teckou je pocet dni od nejakeho data.
Za desetinnou teckou je cast dne, tedy napr. 12 hod = 0.5.
Kdyz si k tomu pridas procedury EncodeDate, DecodeDate, pripadne neco vynasobis
nebo vydelis 24 nebo 60, jses hotov.

Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================

Odpovedá: eNca

18. 10. 2002 12:02

Jan Sebelík wrote:

>>Odesílatel: David Kraina <DKx@Seznam.cz>
>>Mam dane datum,
>>ktere je starsi, nez datum aktualni a potreboval bych spocitat, kolik do
>>neho zbyva DNI:HODIN:MINUT:SEKUND.
>>
>>
>
>TDateTime lze normalne scitat, odecitat atd.
>TDateTime = Double
>Pred desetinnou teckou je pocet dni od nejakeho data.
>Za desetinnou teckou je cast dne, tedy napr. 12 hod = 0.5.
>Kdyz si k tomu pridas procedury EncodeDate, DecodeDate, pripadne neco
vynasobis nebo vydelis 24 nebo 60, jses hotov.
>

Tak jednoduche to asi neni - typicky rozdil mezi 1.1.2004 a 1.1.2005
bude ciselne roven rozdilu mezi 1.1.2005 a 2.1.2006 (kvuli prestupnemu
roku)
ale v prvnim pripade bych ocekaval, ze rozdil bude prezentovan jako 1
rok a 0 dnu a v druhem pripade 1 rok a 1 den.

Analogicky problem bude s delkama mesicu.

eNca

Odpovedá: Lstiburek Pavel

18. 10. 2002 12:37

V puvodnim dotazu jsi psal pouze o dnech, hodinach.... o mesicich a rocich
nic nebylo ( , musis byt presnejsi.
Pokud to chces takhle tak musis pocitat s kalendarem:

PocetRoku = (12 - Month( DatumOd) + Month( DatumDo) + Year(DatumDo)*12 -
Year(DatumOd)*12 ) div 12
PocetMesicu = (12 - Month( DatumOd) + Month( DatumDo) + Year(DatumDo)*12 -
Year(DatumOd)*12 ) mod 12
-- dni do konce měsíce pro pocatecni datum
PocetDni = DayOfMonth(Month( DatumOd)) - DAY( datumOd)
--dni na počátku měsíce pro koncové datum
PocetDni = PocetDni + Day( DatumDo)
Zohledneni posledniho mesice z poctu dni je sice mozne, ale neni zcela
korektni.
Pavel

> Od: eNca [mailto:delphi@enca.cz]
> >>Odesílatel: David Kraina <DKx@Seznam.cz>
> >>Mam dane datum,
> >>ktere je starsi, nez datum aktualni a potreboval bych
> spocitat, kolik do
> >>neho zbyva DNI:HODIN:MINUT:SEKUND.
> >>
> >>
> >
> >TDateTime lze normalne scitat, odecitat atd.
> >TDateTime = Double
> >Pred desetinnou teckou je pocet dni od nejakeho data.
> >Za desetinnou teckou je cast dne, tedy napr. 12 hod = 0.5.
> >Kdyz si k tomu pridas procedury EncodeDate, DecodeDate,
> pripadne neco vynasobis nebo vydelis 24 nebo 60, jses hotov.
> >
>
> Tak jednoduche to asi neni - typicky rozdil mezi 1.1.2004 a 1.1.2005
> bude ciselne roven rozdilu mezi 1.1.2005 a 2.1.2006 (kvuli
> prestupnemu
> roku)
> ale v prvnim pripade bych ocekaval, ze rozdil bude prezentovan jako 1
> rok a 0 dnu a v druhem pripade 1 rok a 1 den.
>
> Analogicky problem bude s delkama mesicu.